#include "ServerLink.h"
/*
 * 功能：初始化在线用户信息链表
 * 形参：头结点地址
 * 返回值：成功：SUCCESS 失败：FAILURE
 */
int InitLink(Online *head)
{
	if(head == NULL)
	{
		return -1;
	}
	
	head = (Online*)malloc(sizeof(Online));
	if (NULL == head)
	{
		printf("\n malloc failure!\n");
	}

	head->next = NULL;
	head->status = 0;
	
	return 1;
}

/*
 * 功能：向链表插入一个结点
 * 形参：1、头结点 2、位置place 3、需要插入结点的地址
 * 返回值：成功：SUCCESS 失败：FAILURE
 */
int InsertLink(Online *head, int place, Online *element)
{
	Online *l = head;

	if (NULL == head || NULL == element)
	{
		return -1;
	}
	
	if (place <= 0 || place > head->status + 1)
	{
		return -1;
	}

	int k = 1;
	while (k < place)
	{
		k++;
		l = l->next;
	}

	element->next = l->next;
	l->next = element;


	head->status++;	//链表长度

	return 1;

}

/*
 * 功能：遍历链表
 * 形参：头结点地址
 * 返回值：成功：SUCCESS 失败：FAILURE
 */
int TraverseLink(Online *head)
{
	if (NULL == head)
	{
		return -1;
	}

	Online *l = head;

	while(l->next != NULL)
	{
		l = l->next;
		printf("id = %s fd = %d forbid = %d admin = %d status = %d\n", 
			l->id, l->fd, l->forbid_flag, l->admin_flag, l->status);

	}

	return 1;
}

/*
 * 功能：根据用户ID返回该用户的结点地址
 * 形参：1、头结点 2、用户ID
 * 返回值：有：返回该结点地址 无：返回：NULL
 */
Online *GetNodeFromID(Online *head, char *user)
{
	if(NULL == user || NULL == head)
	{
		return NULL;
	}

	Online *l = head->next;

	while(NULL != l)
	{
		if (strcmp(user, l->id) == 0)
		{
			return l;
		}
		l = l->next;
	}

	return NULL;
}

/*
 * 功能：根据用户ID，删除结点信息
 * 形参：1、头结点 2、用户ID
 * 返回值：成功：SUCCESS 失败：FAILURE
 */
int DeleteNodeFromID(Online *head, char *user)
{
	if(NULL == user || NULL == head)
	{
		return -1;
	}

	Online *l = head;
	Online *tmp;

	while(NULL != l->next)
	{	
		tmp = l;
		l = l->next;
		if (strcmp(user, l->id) == 0)
		{

			break;
		}
	}

	if (NULL == l)
	{
		return -1;
	}

	tmp->next = l->next;

	head->status--;
	free(l);

	return 1;
}

